// 内核系统调用调度

#include "types.h"

extern void printk(char *fmt, ...);

#define SYSTEM_CALL_TYPE_PRINT 0 // 系统调用类型:打印
#define SYSTEM_CALL_TYPE_IO 1    // 系统调用类型:IO
#define SYSTEM_CALL_TYPE_NUM 2   // 系统调用类型总数

#define SYSTEM_CALL_RET_ERE -1
#define SYSTEM_CALL_RET_SUC 0

// 内核系统调用执行函数的类型
// 返回值类型为:int
// num:传递给内核系统调用执行函数的参数个数
// args:传递内核系统调用执行函数的参数指针
typedef int (*system_call_fun_t)(int argc, int *args);

// ----------系统调用类型执行函数声明开始---------- //
int OSPrint(int argc, int *args);
int OSIO(int argc, int *args);
// ----------系统调用类型执行函数声明结束---------- //

// 系统调用执行函数表
system_call_fun_t systemCallTalbe[SYSTEM_CALL_TYPE_NUM] = {
    (system_call_fun_t)OSPrint,
    // (system_call_fun_t)OSIO,
    NULL,
};

// 系统调用调度
// type:系统调用函数表的索引值,系统调用号
// argc:传递给系统调用执行函数的参数个数
// args:传递给系统调用执行函数的参数指针
int os_system_call(int type, int argc, int *args)
{
    printk("[os_system_call],type:%d,argc:%d,args:%a\n", type, argc, args);
    if (systemCallTalbe[type])
    {
        return ((systemCallTalbe[type])(argc, args));
    }
}

int OSPrint(int argc, int *args)
{
    printk("this in OSPrint,argc:%d,args:%a\n", argc, args);
    return (SYSTEM_CALL_RET_SUC);
}